Datlas es un startup de analítica dedicada a la transformación de datos para negocios con la intención de crear soluciones personalizadas. Esto, a través del desarrollo de contenido, plataformas digitales y métodos que se apalancan en técnicas de analítica avanzada. La empresa se encuentra ubicada en la colonia centro de la ciudad de Monterrey. Sólo hay 1 CEDIS y se encuentra ubicado en el mismo lugar que las oficinas. El negocio puede atender cualquiera de los 13 municipios de la zona metropolitana de Monterrey.
El socio formador nos compartió una carpeta con diferentes datos de la empresa los datos proporcionados son los siguientes:
Así mismo conducimos una investigación de mercado enfocada en los competidores que Alimentos y Snacks Monterrey tiene en el sector de comercializadoras de alimentos. También extraimos datos de fuentes secundarias como Euromonitor para obtener datos macroeconómicos y poder hacer predicciones sobre el mercado y la economía para los próximos años.
Para el análisis exploratorio de datos se unieron las bases de datos proporcionadas por el socio formador utilizando las variables en común (id´s) con excepción de la base de prospectos.
Dicha empresa opera desde inicios del 2020 y se dedica a la fabricación y distribución de una amplia gama de productos alimenticios con enfoque a restaurantes, hoteles, catering y cafeterías. Su mecanismo de ventas consiste en un portal en línea con entrega a negocios en un lapso de 1 a 2 días. También se pueden programar entregas recurrentes. Como se mencionó anteriormente, Alimentos y Snacks Monterrey se encuentra en una fase de expansión para el 2023. La empresa cuenta con la oportunidad de dedicarle recursos comerciales a un proyecto de expansión.
El tipo de estrategia que se recomienda para la empresa Datlas es la de Desarrollo de Mercados. Esto significa ganar participación en el mercado por medio de la atracción de nuevos clientes hacia productos existentes. La base de datos presenta 56 clientes activos de su portafolio de 100, lo que significa que sólo 56 de sus clientes han hecho pedidos en los últimos años. Por lo tanto dentro de los mismos clientes que ya tiene recomendamos poder hacer que esos 44 no activos comiencen a ser activos, ya que reconocemos que los 56 clientes suelen pedir las mismas cantidades de productos año tras año. Agregando a esto, la funcionalidad de atraer nuevos clientes cumple con el objetivo principal de expansión sin tener que alterar su catálogo de productos.
Para esto los métodos que recomendamos son trabajar con varios canales dentro de los mismos clientes por ejemplo mejorar las ventas internas, socios de ventas de canal, medios digitales, franquicias y alianzas estratégicas.
También buscamos identificar aquellos prospectos con un perfil similar a los clientes más recurrentes con la intención de aumentar las ventas en los próximos años.
Perspectivas
La compañía de snacks con la que estamos trabajando en el reto se dedica a vender snacks por medio de su página web y cuenta con solo 1 sucursal la cual está ubicada en el centro de Monterrey y de esta salen todos sus pedidos. Uno de los problemas dentro de sus procesos que decidimos solucionar está relacionado con la logística ya que tener una sola sucursal puede provocar que las entregas se retrasen por problemas de saturación así como por la distancia de la sucursal a los clientes.
Al estudiar los procesos de la empresa podremos llegar a una conclusión acerca de donde es más conveniente ubicar el nuevo centro de distribución de la empresa o si combiene enfocarse solamente en aumentar su cartera de clientes.
Objetivos
Se requiere atender más negocios, puntos de venta, desplazar más producto y aumentar ventas. Por lo que como equipo nos enfocaremos en el área de logística, específicamente encontrar un punto estratégico para atender las necesidades de sus clientes de la mejor manera posible. Para esto analizaremos las características de sus mejores clientes actuales para después buscar dentro de los prospectos a aquellos que tienen esas mismas características o similares y ver donde están ubicados para ver si sería necesario abrir otras sucursal o expandir la que ya tienen. Esto ayudaría a la organización socio formadora a aumentar su eficiencia y eficacia e invertir sus recursos de manera correcta y estratégicamente.
Temas estratégicos
El ámbito de alcance para el reto es toda el área metropolitana de Monterrey, se tomarán como variables las características de clientes actuales así como las de clientes potenciales y la ubicación geográfica de cada uno de estos puntos. Las principales entidades a analizar son todos en la cartera de clientes del socio formador. .
Ejes de trabajo
El siguiente es un ejemplo base de cómo se vería un mapa conceptual con base al cumplimiento del objetivo de crecimiento de venta de negocios:
El mapa estratégico refleja mucho de la estrategia de la empresa y cuál es su propósito u objetivo para su expansión. El punto de vista financiero se enfoca en aumentar su cartera de clientes, aumentar la distribución de cualquier producto y maximizar las ventas de tal forma que que los beneficios se hagan recurrentes.
Base1 <- merge(detalle,catalogo, by.x = "id_producto", by.y = "id_producto", all.x = T)
Base2 <- merge(pedido,clientes, by.x = "id_cliente", by.y = "id_cliente", all.x = T)
Base <- merge(Base1,Base2, by.x = "id_pedido", by.y = "id_pedido", all.x = T)
Exploración de la base de datos
summary(Base)
## id_pedido id_producto id_detalle cantidad
## Min. : 1 Min. : 1.00 Min. : 1 Min. : 1.00
## 1st Qu.: 7489 1st Qu.: 26.00 1st Qu.: 38516 1st Qu.:15.00
## Median :14995 Median : 52.00 Median : 77030 Median :20.00
## Mean :14997 Mean : 51.52 Mean : 77030 Mean :18.42
## 3rd Qu.:22483 3rd Qu.: 77.00 3rd Qu.:115544 3rd Qu.:24.00
## Max. :30000 Max. :102.00 Max. :154059 Max. :31.00
##
## nombre mls gms precio_unidad
## Length:154059 Length:154059 Length:154059 Min. : 12.00
## Class :character Class :character Class :character 1st Qu.: 37.00
## Mode :character Mode :character Mode :character Median :103.00
## Mean : 87.95
## 3rd Qu.:124.00
## Max. :250.00
##
## sku familia categoria activo
## Length:154059 Length:154059 Length:154059 Mode:logical
## Class :character Class :character Class :character TRUE:154059
## Mode :character Mode :character Mode :character
##
##
##
##
## id_cliente fechapedido
## Min. : 1.00 Min. :2020-01-01 00:00:00.00
## 1st Qu.: 13.00 1st Qu.:2020-10-15 00:00:00.00
## Median : 25.00 Median :2021-07-26 00:00:00.00
## Mean : 30.04 Mean :2021-07-29 16:41:42.96
## 3rd Qu.: 35.00 3rd Qu.:2022-05-15 00:00:00.00
## Max. :100.00 Max. :2023-02-28 00:00:00.00
##
## fechaentrega cancelado lat
## Min. :2020-01-02 00:00:00.00 Mode :logical Min. :25.41
## 1st Qu.:2020-10-16 00:00:00.00 FALSE:146232 1st Qu.:25.67
## Median :2021-07-27 00:00:00.00 TRUE :7827 Median :25.68
## Mean :2021-07-30 13:19:22.25 Mean :25.68
## 3rd Qu.:2022-05-16 00:00:00.00 3rd Qu.:25.70
## Max. :2023-02-28 00:00:00.00 Max. :25.96
## NA's :209
## long nom_estab raz_social per_ocu
## Min. :-100.5 Length:154059 Length:154059 Length:154059
## 1st Qu.:-100.3 Class :character Class :character Class :character
## Median :-100.3 Mode :character Mode :character Mode :character
## Mean :-100.3
## 3rd Qu.:-100.3
## Max. :-100.1
##
## tipo_vial nom_vial edificio edificio_e
## Length:154059 Length:154059 Length:154059 Length:154059
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## tipo_asent nomb_asent tipoCenCom nom_CenCom
## Length:154059 Length:154059 Length:154059 Length:154059
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## num_local cod_postal cve_ent entidad
## Length:154059 Length:154059 Min. :19 Length:154059
## Class :character Class :character 1st Qu.:19 Class :character
## Mode :character Mode :character Median :19 Mode :character
## Mean :19
## 3rd Qu.:19
## Max. :19
##
## CVE_MUN municipio cve_loc localidad
## Min. : 6.00 Length:154059 Min. :1 Length:154059
## 1st Qu.:39.00 Class :character 1st Qu.:1 Class :character
## Median :39.00 Mode :character Median :1 Mode :character
## Mean :36.33 Mean :1
## 3rd Qu.:39.00 3rd Qu.:1
## Max. :49.00 Max. :1
##
## ageb manzana
## Length:154059 Min. : 1.00
## Class :character 1st Qu.: 5.00
## Mode :character Median :14.00
## Mean :15.64
## 3rd Qu.:24.00
## Max. :58.00
##
str(Base)
## 'data.frame': 154059 obs. of 39 variables:
## $ id_pedido : num 1 1 1 1 1 2 2 2 2 2 ...
## $ id_producto : num 40 53 17 44 99 96 37 96 9 43 ...
## $ id_detalle : num 2 4 1 5 3 10 7 11 12 6 ...
## $ cantidad : num 22 19 1 10 28 24 28 24 23 23 ...
## $ nombre : chr "FLAN" "MACHACA" "CARNITAS/PIERNA" "HAMBURGUESA" ...
## $ mls : chr "n/a" "n/a" "n/a" "n/a" ...
## $ gms : chr "n/a" "500" "500" "500" ...
## $ precio_unidad: num 80 134 123 105 103 105 133 105 104 50 ...
## $ sku : chr "A389H312QY" "B208J424BU" "F481C424CT" "H265D235SG" ...
## $ familia : chr "preparado" "animal" "animal" "animal" ...
## $ categoria : chr "normal" "congelado" "congelado" "congelado" ...
## $ activo : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
## $ id_cliente : num 74 74 74 74 74 19 19 19 19 19 ...
## $ fechapedido : POSIXct, format: "2020-01-01" "2020-01-01" ...
## $ fechaentrega : POSIXct, format: "2020-01-02" "2020-01-02" ...
## $ cancelado : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ lat : num 25.7 25.7 25.7 25.7 25.7 ...
## $ long : num -100 -100 -100 -100 -100 ...
## $ nom_estab : chr "RESTAURANTE EL BUEY" "RESTAURANTE EL BUEY" "RESTAURANTE EL BUEY" "RESTAURANTE EL BUEY" ...
## $ raz_social : chr "ALIMENTOS CUBE SA DE CV" "ALIMENTOS CUBE SA DE CV" "ALIMENTOS CUBE SA DE CV" "ALIMENTOS CUBE SA DE CV" ...
## $ per_ocu : chr "31 a 50 personas" "31 a 50 personas" "31 a 50 personas" "31 a 50 personas" ...
## $ tipo_vial : chr "CALLE" "CALLE" "CALLE" "CALLE" ...
## $ nom_vial : chr "TENAYUCA" "TENAYUCA" "TENAYUCA" "TENAYUCA" ...
## $ edificio : chr NA NA NA NA ...
## $ edificio_e : chr NA NA NA NA ...
## $ tipo_asent : chr "COLONIA" "COLONIA" "COLONIA" "COLONIA" ...
## $ nomb_asent : chr "RESIDENCIAL ANAHUAC 1 SECTOR" "RESIDENCIAL ANAHUAC 1 SECTOR" "RESIDENCIAL ANAHUAC 1 SECTOR" "RESIDENCIAL ANAHUAC 1 SECTOR" ...
## $ tipoCenCom : chr NA NA NA NA ...
## $ nom_CenCom : chr NA NA NA NA ...
## $ num_local : chr NA NA NA NA ...
## $ cod_postal : chr "66457" "66457" "66457" "66457" ...
## $ cve_ent : num 19 19 19 19 19 19 19 19 19 19 ...
## $ entidad : chr "NuevoLeon" "NuevoLeon" "NuevoLeon" "NuevoLeon" ...
## $ CVE_MUN : num 46 46 46 46 46 26 26 26 26 26 ...
## $ municipio : chr "San Nicolás de los Garza" "San Nicolás de los Garza" "San Nicolás de los Garza" "San Nicolás de los Garza" ...
## $ cve_loc : num 1 1 1 1 1 1 1 1 1 1 ...
## $ localidad : chr "San Nicolás de los Garza" "San Nicolás de los Garza" "San Nicolás de los Garza" "San Nicolás de los Garza" ...
## $ ageb : chr "049A" "049A" "049A" "049A" ...
## $ manzana : num 11 11 11 11 11 1 1 1 1 1 ...
Base$nom_estab <- as.factor(Base$nom_estab)
Base$municipio <- as.factor(Base$municipio)
Base$entidad <- as.factor(Base$entidad)
Base$tipo_asent <- as.factor(Base$tipo_asent)
Base$municipio <- as.factor(Base$entidad)
Base$tipo_vial <- as.factor(Base$tipo_vial)
Base$per_ocu <- as.factor(Base$per_ocu)
Base$familia <- as.factor(Base$familia)
Base$categoria <- as.factor(Base$categoria)
Base$nombre <- as.factor(Base$nombre)
Base$localidad <- as.factor(Base$localidad)
Base$nombre <- as.factor(Base$nombre)
Base$id_cliente <- as.factor(Base$id_cliente)
Base$manzana <- as.factor(Base$manzana)
Base$Total <- Base$cantidad * Base$precio_unidad
Base %<>% group_by(id_pedido) %>% mutate(cantidad_pedido = sum(cantidad),
ventas_pedido = sum(Total)) %>% ungroup()
ggplot(Base, aes(x=localidad, y=Total, fill=localidad)) +
geom_bar(stat="identity") +
scale_fill_brewer(palette = "Blue") +
coord_flip()
## Warning in pal_name(palette, type): Unknown palette Blue
La gráfica de barras presenta el total de ventas que existen por parte de la empresa por cada uno de los municipios en la zona metropolitana de Monterrey. Como se puede observar, está claro que el municipio de Monterrey tiene un ventaja considerable sobre todos los demás municipios dándonos a entender que la mayoría de sus clientes están concentrados en esa zona. San Nicolás y San Pedro fueron los siguientes municipios más altos y esto puede presentarse como una oportunidad de expansión atractiva para la empresa.
ventas_por_tienda <- Base %>%
group_by(id_cliente) %>%
summarise(total_venta = sum(Total)) %>%
arrange(desc(total_venta))
ventas_por_tienda
## # A tibble: 56 × 2
## id_cliente total_venta
## <fct> <dbl>
## 1 5 7140516
## 2 24 7113992
## 3 30 7004642
## 4 31 6935632
## 5 27 6913895
## 6 4 6901913
## 7 16 6882970
## 8 26 6859402
## 9 19 6835183
## 10 25 6787978
## # … with 46 more rows
En la tabla anterior podemos observar que de sus 100 clientes actuales solo 56 de ellos permanecen activos y han realizado pedidos en los últimos años. También podemos ver que su cliente estrella es El Mago Restaurante y Banquetes.
Base$fechapedido <- as.yearqtr(Base$fechapedido)
TS <- Base %>%
group_by(fechapedido) %>%
summarise(total_venta = sum(Total))
TS
## # A tibble: 13 × 2
## fechapedido total_venta
## <yearqtr> <dbl>
## 1 2020 Q1 19558122
## 2 2020 Q2 20142936
## 3 2020 Q3 19394997
## 4 2020 Q4 20206386
## 5 2021 Q1 20307492
## 6 2021 Q2 19919844
## 7 2021 Q3 20191812
## 8 2021 Q4 18551322
## 9 2022 Q1 19657319
## 10 2022 Q2 19616103
## 11 2022 Q3 19758087
## 12 2022 Q4 19766473
## 13 2023 Q1 12894784
plot(TS$fechapedido,TS$total_venta, type="l",col="blue", lwd=2, xlab ="Date",ylab ="ventas", main = "VENTAS")
En la gráfica anterior podemos observar las ventas y como estas se mantienen constantes año tras año. Esto es debido a que los 56 clientes que encontramos activos normalmente realizan los mismos pedidos o similiares a traves de los años, son proveedores muy constantes que al no tener tanto crecimiento no necesitan más de lo que ya piden.
Dicker-Fuller test
adf.test(Base$Total)
## Warning in adf.test(Base$Total): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: Base$Total
## Dickey-Fuller = -53.091, Lag order = 53, p-value = 0.01
## alternative hypothesis: stationary
H0: Non-stationary HA: Stationary. p-values < 0.05 rechazar H0. P-Value > 0.05. no se rechaza H0. La serie de tiempo es ESTACIONARIA ya que se rechaza H0 con un p-value de 0.01
Esto significa que la serie de tiempo exhibe una estructura constante y predecible a lo largo del tiempo.
MODELO ARIMA
La función “auto.arima” busca entre diferentes combinaciones de órdenes y selecciona el modelo que minimiza el criterio de información seleccionado. Luego devuelve el modelo ajustado que mejor se ajusta a la serie de tiempo proporcionada.
m.tw=auto.arima(TS$total_venta)
summary(m.tw)
## Series: TS$total_venta
## ARIMA(0,0,0) with non-zero mean
##
## Coefficients:
## mean
## 19228129.0
## s.e. 521628.8
##
## sigma^2 = 3.831e+12: log likelihood = -206.26
## AIC=416.52 AICc=417.72 BIC=417.65
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0 1880620 1078485 -1.362012 6.755503 1.017869 -0.01322231
f.tw=forecast(m.tw, h=12)
plot(f.tw)
La gráfica anterior muestra el comportamiento de las ventas a través del tiempo y su predicción a futuro. Como podemos observar se trata de una serie de datos estacionaria ya que no existe variabilidad en los datos, lo que significa que no es posible hacer predicciones a futuro con los datos proporcionados por el socio formador.
map<-readShapePoly("/Users/anavaleriagarciarenteria/Desktop//RETO/municipios/municipiosZMM.shp",IDvar="CVE_MUN",proj4string=CRS("+proj=longlat")) ### reads data from a polygon shapefile.
## Warning: shapelib support is provided by GDAL through the sf and terra packages
## among others
lmat<-coordinates(map)
names(lmat)<-c("lon","lat")
map.centroid<-coordinates(map)
summary(map)
## Object of class SpatialPolygonsDataFrame
## Coordinates:
## min max
## x -100.86190 -99.68620
## y 25.22379 26.39517
## Is projected: FALSE
## proj4string : [+proj=longlat +datum=WGS84 +no_defs]
## Data attributes:
## CVEGEO CVE_ENT CVE_MUN NOMGEO
## 19006 :1 19:13 006 :1 Apodaca :1
## 19009 :1 009 :1 Cadereyta Jiménez:1
## 19018 :1 018 :1 García :1
## 19019 :1 019 :1 General Escobedo :1
## 19021 :1 021 :1 Guadalupe :1
## 19026 :1 026 :1 Juárez :1
## (Other):7 (Other):7 (Other) :7
Base$CVE_MUN <- as.character(Base$CVE_MUN)
Base$CVE_MUN[Base$CVE_MUN=="6"] <- "006"
Base$CVE_MUN[Base$CVE_MUN=="19"] <- "019"
Base$CVE_MUN[Base$CVE_MUN=="21"] <- "021"
Base$CVE_MUN[Base$CVE_MUN=="26"] <- "026"
Base$CVE_MUN[Base$CVE_MUN=="39"] <- "039"
Base$CVE_MUN[Base$CVE_MUN=="45"] <- "045"
Base$CVE_MUN[Base$CVE_MUN=="46"] <- "046"
Base$CVE_MUN[Base$CVE_MUN=="48"] <- "048"
Base$CVE_MUN[Base$CVE_MUN=="49"] <- "049"
map_sf<-read_sf("/Users/anavaleriagarciarenteria/Desktop//RETO/municipios/municipiosZMM.shp")
plot(map,col="grey",border="blue",axes=TRUE,las=1) + title(main="Zona metropolitana de Monterrey")
## integer(0)
La gráfica anterior muestra cómo están distribuidos los municipios que atiende actualmente la empresa Alimentos y Snacks Monterrey.
map_dataa<-geo_join(map,Base,'CVE_MUN','CVE_MUN',how='inner')
## Warning: We recommend using the dplyr::*_join() family of functions instead.
map_datab<-right_join(map_sf,Base,by="CVE_MUN")
## Warning in sf_column %in% names(g): Each row in `x` is expected to match at most 1 row in `y`.
## ℹ Row 1 of `x` matches multiple rows.
## ℹ If multiple matches are expected, set `multiple = "all"` to silence this
## warning.
Matriz de Connectividad
map.link<-poly2nb(map,queen=T)
map.linkW<-nb2listw(map.link, style="W")
map.centroid<-coordinates(map)
plot(map,border="blue",axes=FALSE,las=1)
plot(map,col="grey",border=grey(0.9),axes=T,add=T)
plot(map.linkW,coords=map.centroid,pch=19,cex=0.1,col="blue",add=T)
title("Spatial Connectivity Matrix")
La matriz espacial de conectividad es una herramienta que se utiliza en análisis geoespaciales y estadísticos. Su objetivo es describir y cuantificar la conectividad que tienen las unidades en un conjunto de datos. En este caso estamos analizando los municipios de Nuevo León, por lo tanto se puede interpretar que tienen una proximidad geográfica espacial, siendo una conectividad que es recíproca. La realización de esta matriz nos ayudará a identificar en futuros análisis la detección de patrones espaciales, su autocorrelación y un modelado estadístico. Están unidos por los centroides representados por la línea azul. Por lo tanto esto representa la conectividad del centro de cada municipio y su relación para futuros análisis.
Ubicación de los clientes activos
ggplot() + geom_sf(data = map_sf) +
geom_point(data = latlongventas, aes(x = longitud, y = latitud, color = total_venta)) +
theme_void() + theme(legend.position = "right")
En el mapa anterior se muestran los 56 clientes activos de Alimentos y Snacks Monterrey, y sus promedios de ventas. La mayoría tiene un promedio de aproximadamente $6,000,000 de pesos, los que tienen un mayor número de ventas se encuentran en el centro del municipio de Monterrey que pudiera inferirse que es donde se perciben más ingresos.
mapa_markers <- leaflet(data=latlongventas) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat=~latitud, popup = ~nom_estab)
mapa_markers
En el mapa anterior se puede observar los clientes activos de Alimentos y Snacks Monterrey utilizando la herramienta de google maps. Son un total de 56 clientes activos en contraste con los 100 que tienen en su portafolio. Los anteriores suelen tener ventas de productos similares y constantes a lo largo de los años. Hay 11 hoteles y 45 restaurantes.
Alimentos más vendidos
ggplot(Base, aes(x=reorder(familia,-Total), y=Total, fill=familia)) +
geom_bar(stat="identity") +
scale_fill_brewer(palette = "Blue") +
coord_flip()
## Warning in pal_name(palette, type): Unknown palette Blue
En la gráfica anterior podemos observar el total de ventas por familia de aliementos y es evidente que los productos animales son los que generan mayores ingresos para la empresa.
Prospectos
prospectos$nombre_act <- as.factor(prospectos$nombre_act)
prospectos$localidad <- as.factor(prospectos$localidad)
base_f <- prospectos %>%
filter(localidad %in% c("Monterrey"))
Para la selección de clientes prospectos filtramos la base de datos solo para el municipio de Monterrey ya que la mayor parte de sus clientes activos actuales se encuentran en esa area.
base_f <- base_f %>%
filter(nombre_act %in% c("Restaurantes con servicio de preparación de alimentos a la carta o de comida corrida","Restaurantes con servicio de preparación de pizzas, hamburguesas, hot dogs y pollos rostizados para llevar"))
base_f
## # A tibble: 838 × 28
## lat long nombre_…¹ nom_e…² raz_s…³ per_ocu tipo_…⁴ nom_v…⁵ edifi…⁶ edifi…⁷
## <dbl> <dbl> <fct> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 25.7 -100. Restaura… BURGUE… <NA> 0 a 5 … AVENIDA PASEO … <NA> <NA>
## 2 25.6 -100. Restaura… VANCOU… PROMOT… 6 a 10… AVENIDA REVOLU… CENTRO… PLANTA…
## 3 25.6 -100. Restaura… LA TIE… <NA> 0 a 5 … AVENIDA EUGENI… <NA> <NA>
## 4 25.8 -100. Restaura… POLLOS… <NA> 0 a 5 … CALLE LA ESP… <NA> <NA>
## 5 25.7 -100. Restaura… RESTAU… <NA> 11 a 3… AVENIDA ALFONS… <NA> <NA>
## 6 25.7 -100. Restaura… COMIDA… <NA> 0 a 5 … CALLE AARON … <NA> PLANTA…
## 7 25.7 -100. Restaura… POLLOS… <NA> 0 a 5 … AVENIDA JESUS … <NA> <NA>
## 8 25.6 -100. Restaura… LA BAR… LA BAR… 0 a 5 … BOULEV… ACAPUL… <NA> <NA>
## 9 25.8 -100. Restaura… PUESTO… <NA> 0 a 5 … CALLE SAN FR… <NA> <NA>
## 10 25.7 -100. Restaura… ROMEOS… OPERAD… 0 a 5 … CALLE DOMING… <NA> <NA>
## # … with 828 more rows, 18 more variables: tipo_asent <chr>, nomb_asent <chr>,
## # tipoCenCom <chr>, nom_CenCom <chr>, num_local <chr>, cod_postal <chr>,
## # cve_ent <dbl>, entidad <chr>, cve_mun <dbl>, municipio <chr>,
## # cve_loc <dbl>, localidad <fct>, ageb <chr>, manzana <dbl>, AGEB_int <chr>,
## # geohash5km <chr>, tipoUniEco <chr>, fecha_alta <chr>, and abbreviated
## # variable names ¹nombre_act, ²nom_estab, ³raz_social, ⁴tipo_vial, ⁵nom_vial,
## # ⁶edificio, ⁷edificio_e
En base a que ya sabemos que la familia de alimentos que más deja ingresos es la animal y también sabemos que de sus clientes actuales la mayor parte son restaurantes, volvemos a filtrara los prospectos enfocándonos en restaurantes con servicio de preparación de alimentos a la carta o de comida corrida y Restaurantes con servicio de preparación de pizzas, hamburguesas, hot dogs y pollos rostizados para llevar.
ggplot() + geom_sf(data = map_sf) +
geom_point(data = base_f, aes(x = long, y = lat, color = localidad)) +
theme_void() + theme(legend.position = "right")
Despues de filtrar los prospectos podemos observar que de los 10,000 prospectos iniciales solamente quedan 838 que pensamos podrían ser buenos clientes para la empresa. Podemos observar en la gráfica anterior donde estan ubicados.
mapa_markers <- leaflet(data=base_f) %>%
addTiles() %>%
addMarkers(lng = ~long, lat=~lat, popup = ~nom_estab)
mapa_markers
En la gráfica anterior podemos observar mucho más detalladamente la ubicación de los prospectos que proponemos para la empresa.
Herramientas para convertir clientes potenciales a clientes activos:
Salesforce es una plataforma que se especializa en gestionar las relaciones con los clientes para automatizar los procesos de ventas sin embargo tiene unas funciones avanzadas para gestionar a los clientes potenciales donde se realiza un seguimiento de ventas y análisis de datos para facilitar la conversión de clientes potenciales.
Hubspot es una herramienta CRM y de marketing que tiene funciones para ayudar a las empresas a atraer, comprometer y convertir clientes potenciales en clientes mediante el seguimiento del comportamiento de usuario, marketing de contenido y correo electrónico esto para poder ayudar a la empresa a generar estrategias efectivas para conversión de clientes.
Google ads es una plataforma en línea que permite a las empresas mostrar anuncios relevantes a clientes potenciales con la herramienta de búsqueda de Google y en su red de socios tiene herramientas como palabras clave, segmentación demográfica y remarketing, para ayudar a las empresas a atraer la atención de clientes potenciales y llevarlos a través del grupo de ventas establecido
Es importante mantener una comunicación con los clientes actuales, en ocasiones las compañías se enfocan en conseguir nuevos clientes y descuidan a los clientes actuales.
Crear una buena experiencia para el cliente antes, durante y después del proceso de compra es importante ya que esto creará retención y lealtad.
Tips para tener un Client engagement strategy efectivo:
Una forma efectiva de demostrarle al cliente su importancia dentro de la compañía es al valorar su opinión, esta comunicación se puede crear por medio de una llamada telefónica en la que el objetivo será obtener retroalimentación acerca de la experiencia al tratar con la compañía.
Casos de éxito
Espontaneidad de Contacto: Rappi
Rappi utiliza este método muy seguido con clientes que han tenido periodos largos de inactividad con sus servicios. Su estrategia se basa en múltiples actividades diferentes con la finalidad de reactivar su participación. Estos incluyen correos promocionales o incluso descuentos en ciertas localizaciones de uso. Además, Rappi busca incentivar esta participación buscando fechas especiales y el contacto más participativo posible que se pueda hacer entre el negocio y el cliente.
Para el caso hemos decidido implementar un modelo de riesgo de árboles que permitiera evaluar si valía la pena efectuar un pedido en función de la variable generada por nosotros calculando el total de cada pedido se utilizó un boxplot para analizar la distribución de los valores y comprender la media máxima y mínima de la variable “total”
Durante el análisis, se identificó que el primer cuartil de la distribución se encontraba en 520 unidades monetarias. Teniendo en cuenta esta referencia, se tomó la decisión de transformar la variable “total” en una variable binaria, asignando el valor de 0 a aquellos pedidos cuyo total era inferior a 520 (lo que indica que no resultaban rentables) y el valor de 1 a aquellos pedidos cuyo total era superior a 520 (lo que indica que sí resultaban rentables).
El árbol de decisiones quedo con los siguientes niveles determinando el riesgo dependiendo de diferentes variables independientes.
margen<-read_xlsx("catalogo_v2.xlsx")
BaseM <- merge(Base,margen, by = "id_producto" )
BaseM$total <- BaseM$cantidad * BaseM$precio_unidad.x
library(dplyr)
# Calcular el promedio del margen agrupado por id_pedido
BasePM1 <- BaseM %>%
group_by(id_pedido) %>%
summarize(promedio_margen = mean(margen),
suma_cantidad = sum(cantidad),
suma_total = sum(total),
cve_mun1 = mean(CVE_MUN),
id_cliente1 = mean(id_cliente))
## Warning: There were 60000 warnings in `summarize()`.
## The first warning was:
## ℹ In argument: `cve_mun1 = mean(CVE_MUN)`.
## ℹ In group 1: `id_pedido = 1`.
## Caused by warning in `mean.default()`:
## ! argument is not numeric or logical: returning NA
## ℹ Run ]8;;ide:run:dplyr::last_dplyr_warnings()dplyr::last_dplyr_warnings()]8;; to see the 59999 remaining warnings.
summary(BasePM1$suma_total)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 15 5796 8190 8332 10676 25730
summary(BasePM1$promedio_margen)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0200 0.1471 0.1729 0.1723 0.1983 0.3000
df1<- BasePM1
library(rpart)
library(rpart.plot)
# df1$total <- df1$cantidad * df1$precio_unidad.x
df1$totaloptimo <- ifelse(df1$suma_total <= 5800, 0, 1)
set.seed(42)
train_indices <- sample(nrow(df1), floor(0.3 * nrow(df1)))
train_data <- df1[train_indices, ]
test_data <- df1[-train_indices, ]
model <- rpart(totaloptimo ~ promedio_margen+suma_cantidad+cve_mun1, data = train_data, method = "class",minsplit = 10, minbucket = 5, cp = 0.01,)
rpart.plot(model)
# modelo para realizar nuevas predicciones
predictions <- predict(model, test_data, type = "class")
# Calcular la precisión del modelo
accuracy <- sum(predictions == test_data$totaloptimo) / nrow(test_data)
print(paste("Precisión del modelo:", accuracy))
## [1] "Precisión del modelo: 0.87452380952381"
De esta manera, se obtuvo un modelo de riesgo de árboles que permitía evaluar la rentabilidad de los pedidos de manera rápida y eficiente. Al aplicar este modelo a los nuevos pedidos, se podía determinar si era conveniente realizar el envío o no, contribuyendo así a disminuir el riesgo.
Se prevé que el ingreso bruto per cápita en México aumente 33,6% en términos reales hasta 2040 (Euromonitor Login, s. f.).
Se pronostica que los alimentos y las bebidas no alcohólicas serán la categoría de mayor gasto de consumo en 2040 (Euromonitor Login, s. f.).
La región de Nuevo León registrará la expansión más rápida en los principales mercados de consumo del país durante 2021-2040 (Euromonitor Login, s. f.).
Se prevé que el número de hogares en México aumente un 16.9% durante el período de pronóstico alcanzando los 42,5 millones para 2040 (Euromonitor Login, s. f.).
Se prevé que el ingreso disponible por hogar en México aumente un 29,5% en términos reales durante 2021-2040 (Euromonitor Login, s. f.).
La tasa de desempleo se reducirá y representará el 3,8% de la población económicamente activa total para 2040 (Euromonitor Login, s. f.).
La proporción de hogares que poseen una tableta crecerá más entre todos los dispositivos digitales, pasando del 32,2% en 2021 al 77,2% de todos los hogares en 2040 (Euromonitor Login, s. f.).
Análisis de competidores: En análisis de la competencia siempre es importante para el éxito de cualquier expansión, pero sobre todo en el mundo de los snacks, que tiende a ser una industria con alta competencia. Usando esta estrategia se podrá brindar una comprensión del panorama competitivo, y se podrán tomar decisiones estratégicas como la diferenciación de productos, la selección de precios y la implementación de promociones especiales.
Optimización de la distribución y logística: La optimización de la distribución y logística de entrega también es fundamental para poder hacer entrega de productos eficientemente a los clientes. Ya cuentan con una entrega de dos días, pero es importante considerarlo para la expansión futura, por ejemplo los patrones de tráfico, rutas óptimas y las áreas de congestión. Así la compañía podrá optimizar la cadena de suministro, reducir costos operativos, y mejorar la experiencia del cliente.
Evaluación de la demanda: La demanda es importante considerar sobre todo para los clientes ya activos, dependiendo de la ubicación en la que se encuentren. También es importante analizar el tamaño de la población, poder adquisitivo y los patrones de consumo de las zonas de Monterrey.
Alimentos, H. (n.d.). Calidad y frescura. Distribuidora de Alimentos en Monterrey - HB Alimentos. https://www.hbalimentos.com/index.html
Casa Garza. (n.d.). https://casagarza.mx/
Datlas (n.d.) Transformando datos en inteligencia de negocios Datlas_Situación_Problema_2023 (1).pdf
INEGI. (n.d.). El Inegi da a conocer los resultados de la encuesta nacional de … https://www.inegi.org.mx/contenidos/saladeprensa/boletines/2021/EstSociodemo/enigh2020.pdf
Euromonitor Login. (s. f.). https://www.portal.euromonitor.com/analysis/tab
Aubagna, M. (2023, March 31). 5 Tips to Reactivate Dormant Customers. Skeepers. https://skeepers.io/en/blog/5-tips-to-reactivate-dormant-customers/
Watts, L. (2020, August 24). The Power Of A Client Engagement Strategy. Forbes. https://www.forbes.com/sites/forbescommunicationscouncil/2020/08/24/the-power-of-a-client-engagement-strategy/?sh=4e99c6d21d13